WindFluxRead Subroutine

public subroutine WindFluxRead(time, dem)

Read wind speed data

Arguments

Type IntentOptional Attributes Name
type(DateTime), intent(in) :: time

current time

type(grid_real), intent(in) :: dem

Variables

Type Visibility Attributes Name Initial
character(len=300), public :: filename
integer(kind=short), public :: i
integer(kind=short), public :: j
real(kind=float), public :: rsquare
type(DateTime), public :: time_toread

time to start reading from

character(len=300), public :: varname

Source Code

SUBROUTINE WindFluxRead &
!
( time, dem )

IMPLICIT NONE

!Arguments with intent(in):
TYPE (DateTime), INTENT(IN) :: time !!current time
TYPE (grid_real), INTENT(IN) :: dem  !digital elevation model to apply drift

!local declarations:
TYPE (DateTime) :: time_toread !! time to start reading from
CHARACTER (LEN = 300) :: filename
CHARACTER (LEN = 300) :: varname
REAL (KIND = float)   :: rsquare
INTEGER (KIND = short) :: i, j

!-------------------------end of declarations----------------------------------

IF ( .NOT. (time < timeNew) ) THEN
   
   time_toread = time + - (dtWindSpeed - anemometersWS % timeIncrement)
   timeString = time_toread
   CALL Catch ('info', 'WindFlux',   &
		                 'read new wind speed data: ', &
                     argument = timeString)


   SELECT CASE (interpolationMethod)
     CASE (0) !input grid
       
          CALL ReadField (fileGrid,  time_toread, &
                        dtWindSpeed, dtGrid, &
                        'M', windSpeed, &
                         varName = windSpeed % var_name)
      
      
     CASE DEFAULT !requires interpolation
      !read new  wind speed data
      CALL ReadData (network = anemometersWS, fileunit = fileunit, &
                      time = time_toread, aggr_time = dtWindSpeed, &
                      aggr_type = 'ave', tresh = valid_prcn)
      
      IF (elevationdrift == 1) THEN !load wind direction
          CALL ReadData (network = anemometersWD, fileunit = fileunitWD, &
                      time = time_toread, aggr_time = dtWindSpeed, &
                      aggr_type = 'ave', tresh = valid_prcn)
      END IF
      
       !interpolate
        IF (interpolationMethod_assignment == 1) THEN !only one method is applied
            
            SELECT CASE (interpolationMethod) 
                CASE (1:3)
                
                CALL Interpolate (network = anemometersWS, &
                            method = interpolationMethod, &
                            near = neighbors, &
                            idw_power = idw_power, & 
                            anisotropy = krige_anisotropy, &
                            varmodel = krige_varmodel, &
                            lags = krige_lags, &
                            maxlag = krige_maxlag, &
                            grid = windSpeed, &
                            devst = grid_devst) 
                
                CASE (4)
                    
                    CALL WindMicromet (anemometersWS, anemometersWD, slope, &
                                       curvature, slope_az, micrometSlopeWT, &
                                       micrometCurvatureWT, windSpeed  )
                    
                CASE (5)
                    
                    CALL WindGonzalezLongatt (anemometersWS, anemometersWD, &
                                              dem, windSpeed)
                
            END SELECT
                
        ELSE
            !loop trough interpolation methods
            DO i = 1, 5
                IF (interpolationMethod_vector(i) > 0) THEN
                    SELECT CASE (interpolationMethod_vector(i))
                        CASE (1:3)
                            CALL Interpolate (network = anemometersWS, &
                                    method = interpolationMethod_vector(i), &
                                    near = neighbors, &
                                    idw_power = idw_power, & 
                                    anisotropy = krige_anisotropy, &
                                    varmodel = krige_varmodel, &
                                    lags = krige_lags, &
                                    maxlag = krige_maxlag, &
                                    grid =  interpolatedMap (i), &
                                    devst = grid_devst) 
                            
                        CASE (4)
                             CALL WindMicromet (anemometersWS, anemometersWD, slope, &
                                       curvature, slope_az, micrometSlopeWT, &
                                       micrometCurvatureWT, interpolatedMap (i) )
                        CASE (5)
                             CALL WindGonzalezLongatt (anemometersWS, anemometersWD, &
                                              dem, interpolatedMap (i) )
                    END SELECT
                    
                END IF
            END DO

            !compose the final interpolated field
            DO i = 1, interpolationMethod_map % idim
                DO j = 1, interpolationMethod_map % jdim
                    IF (interpolationMethod_map % mat(i,j) /= &
                        interpolationMethod_map % nodata ) THEN
                        windSpeed % mat (i,j) = &
                        interpolatedMap (interpolationMethod_map % mat(i,j)) % mat(i,j)
                    END IF
                END DO
            END DO

        END IF  !1 or more interpolation methods 
        
	END SELECT

  !apply scale factor and offset, if defined
	IF (offset_value /= MISSING_DEF_REAL) THEN
	   CALL Offset (windSpeed, offset_value)
	END IF
	
	
	IF (scale_factor /= MISSING_DEF_REAL) THEN
	   CALL Scale (windSpeed, scale_factor)
	END IF


  !grid exporting
  IF(export > 0 ) THEN
	  IF( time == timeNewExport .AND. &
        time >= export_start .AND. &
        time <= export_stop ) THEN
        timeString = time
        timeString = timeString(1:19)
        timeString(14:14) = '-'
		    timeString(17:17) = '-'
        
        grid_devst % reference_time = windSpeed % reference_time
        IF (needConversion) THEN
           CALL GridConvert (windSpeed, exportedGrid)
           CALL GridConvert (grid_devst, exportedGridVar)
        ELSE
           exportedGrid = windSpeed
           exportedGridVar = grid_devst
        END IF 

        SELECT CASE (export_format)
        CASE (1) !esri-ascii
              export_file = TRIM(export_path) //  TRIM(timeString) // &
                           '_windspeed.asc'
              CALL Catch ('info', 'WindFlux',   &
		                       'exporting grid to file: ', &
                           argument = TRIM(export_file))
              CALL ExportGrid (exportedGrid, export_file, ESRI_ASCII)
              
              IF (krige_var == 1) THEN !export kriging variance
                    export_file_var = TRIM(export_path) //  TRIM(timeString) // &
                           '_windspeed_variance.asc'
                    CALL Catch ('info', 'WindFlux',   &
		                       'exporting variance grid to file: ', &
                              argument = TRIM(export_file_var))
                    CALL ExportGrid (exportedGridVar, export_file_var, ESRI_ASCII)
              END IF
              
        CASE (2) !esri-binary
              export_file = TRIM(export_path) //  TRIM(timeString) // &
                           '_windspeed'
              CALL Catch ('info', 'WindFlux',   &
		                       'exporting grid to file: ', &
                           argument = TRIM(export_file))
              CALL ExportGrid (exportedGrid, export_file, ESRI_BINARY)
              
              IF (krige_var == 1) THEN !export kriging variance
                   export_file_var = TRIM(export_path) //  TRIM(timeString) // &
                               '_windspeed_variance'
                   CALL Catch ('info', 'WindFlux',   &
		                       'exporting variance grid to file: ', &
                              argument = TRIM(export_file_var))
                   CALL ExportGrid (exportedGridVar, export_file_var, ESRI_BINARY)
              END IF
              
        CASE (3) !net_cdf
              CALL SetCurrentTime (time, exportedGrid)
              CALL Catch ('info', 'WindFlux',   &
                           'exporting grid to file: ', &
                           argument = TRIM(export_file))
              CALL ExportGrid (exportedGrid, export_file, 'wind_speed', 'append')
              
              IF (krige_var == 1) THEN !export kriging variance
                  CALL SetCurrentTime (time, exportedGridVar)
                  CALL Catch ('info', 'WindFlux',   &
		                       'exporting grid to file: ', &
                              argument = TRIM(export_file_var))
                 CALL ExportGrid (exportedGridVar, export_file_var, 'wind_speed_variance', 'append')
              END IF
        END SELECT
        timeNewExport = timeNewExport + export_dt
    END IF
  ENDIF

  !time forward
  timeNew = timeNew + dtWindSpeed
END IF

RETURN
END SUBROUTINE WindFluxRead